#include "TaskQueue.hpp"
#include "ThreadPool.hpp"
#include <future>
#include <iostream>
#include <thread>
using namespace std;

// 任务函数
void task(void *arg)
{
    int num = *(int *)arg;
    cout << this_thread::get_id() << "号工作线程执行任务中..."
         << " 任务编号" << num << endl;
    this_thread::sleep_for(chrono::seconds(1));
}

void test()
{
    cout << "================ 开始测试！================" << endl;

    // 创建线程池，最小线程数为2，最大线程数为10
    ThreadPool<int> pool(2, 10);

    // 任务队列中添加100个任务
    for (int i = 0; i < 100; ++i)
    {
        int *num1 = new int(i + 100); // 为了避免num被释放，这里使用new
        pool.addTask(Task<int>(task, num1));
    }

    this_thread::sleep_for(chrono::seconds(10));

    // 任务队列中添加20个任务
    for (int i = 0; i < 20; ++i)
    {
        int *num2 = new int(i + 200);
        pool.addTask(Task<int>(task, num2));
    }

    this_thread::sleep_for(chrono::seconds(10));

    cout << "================ 测试结束！================" << endl;
}

int main()
{
    test();
    return 0;
}